#include <stdio.h>
// 2）用于全局变量（位于块作用域外部）
// static用于函数外部声明的全局变量时，表示该变量只用于当前文件，其他源码文件不可以引用该变量，即该变量不会被链接（link）
static int g = 1000; // 值必须为常量

// 只在当前文件里面使用的函数，也可以声明为static，表明该函数只在当前文件使用，其他文件可以定义同名函数。
static int add(int a, int b)
{
    // 1）用于局部变量（位于块作用域内部）
    // static用于函数内部声明的局部变量时，表示该变量的值会在函数每次执行后得到保留，下次执行时不会进行初始化，就类似于一个只用于函数内部的全局变量。由于不必每次执行函数时，都对该变量进行初始化，这样可以提高函数的执行速度
    static int call_count = 0; // 值必须为常量
    call_count++;
    printf("%d\n", call_count);
    return a + b;
}

int main(int argc, char **argv)
{
    add(1, 1); // 1
    add(1, 1); // 2
    add(1, 1); // 3
    return 0;
}